package Modelo;

import java.awt.Dimension;
import java.awt.image.BufferedImage;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.*;
import java.io.*;
import javax.swing.ImageIcon;
import javax.swing.JFileChooser;
import javax.swing.JLabel;
import org.jfree.chart.ChartUtilities;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.util.TableOrder;

/**
 * @author SAW
 */
public class Grafico {

    private BufferedImage _image ;//para la imagen en memoria
    private JFreeChart grafico ;// el grafico
    private Dimension d;//dimension del grafico

    public Grafico(){
        
    }
    /* Crea el grafico */
    public void crear_grafico_de_barras(Dimension d, double[] v, String[] arg1, String arg2[],String[] data,int tipo){
        this.d= d;
        DefaultCategoryDataset dataset = new DefaultCategoryDataset();
        //arg1 valores en el cuadrito dandole nombre
         //arg2 son los valores en las x
        //se llenan los datos
        for(int i=0; i<=v.length-1;i++){
            dataset.setValue(v[i], arg1[i], arg2[i]);
        }

        //se crea el grafico
       /* grafico = ChartFactory.createBarChart3D(data[0], data[1],
                  data[2], dataset, PlotOrientation.VERTICAL , true,
                  false, true);*/

        switch (tipo) {
            case 1:
                grafico = ChartFactory.createAreaChart(data[0], data[1],
                        data[2], dataset, PlotOrientation.VERTICAL, true,
                        true, true);
                break;
            case 2:
                grafico = ChartFactory.createBarChart(data[0], data[1],
                        data[2], dataset, PlotOrientation.HORIZONTAL, true,
                        true, true);
                break;
            case 3:
                grafico = ChartFactory.createBarChart3D(data[0], data[1],
                        data[2], dataset, PlotOrientation.VERTICAL , true,
                        false, true);
                break;
            case 4:
                grafico = ChartFactory.createLineChart(data[0], data[1],
                        data[2], dataset, PlotOrientation.VERTICAL, true,
                        true, true);
                break;
            case 5:
                grafico = ChartFactory.createLineChart3D(data[0], data[1],
                        data[2], dataset, PlotOrientation.VERTICAL, true,
                        true, true);
                break;
            case 6:
                grafico = ChartFactory.createMultiplePieChart(data[0], dataset,
                        TableOrder.BY_COLUMN, true, true, true);
                break;
            case 7:
                grafico = ChartFactory.createMultiplePieChart3D(data[0], dataset,
                        TableOrder.BY_COLUMN, true, true, true);
                break;
            default:
                grafico = null;
        }


        //se coloca el grafico en memoria
        _image = grafico.createBufferedImage(this.d.width,this.d.height);
        //System.err.println("grafico creado");
    }

    /* carga la imagen que esta en memoria en el objeto jLabel */
    public void cargar_grafico(JLabel lb){
        ImageIcon imagenFondo = new ImageIcon(_image);
        lb.setIcon(imagenFondo);
        lb.repaint();
    }
    
    /* presenta la ventana de dialogo "guardar" y salva el grafico generado en JPG */
     public void Guardar(){
       JFileChooser fileChooser = new JFileChooser();
       int result = fileChooser.showSaveDialog(null);
       if ( result == JFileChooser.APPROVE_OPTION ){
            try {
                //se obtiene la direccion donde se guardara la imagen
                String url = fileChooser.getSelectedFile().toString();
                //Se guarda la imagen
                ChartUtilities.saveChartAsJPEG(new File(url + ".jpg"), grafico, d.width, d.height);
            } catch (IOException ex) {
                Logger.getLogger(Grafico.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
   }
}

